package system

import (
	"gitcode.com/G-YT/iHealth25/server/global"
	"gitcode.com/G-YT/iHealth25/server/model/common"
	"github.com/gofrs/uuid/v5"
)

type Login interface {
	GetUsername() string
	GetNickname() string
	GetUUID() uuid.UUID
	GetUserId() uint
	GetAuthorityId() uint
	GetUserInfo() any
}

var _ Login = new(SysUser)

type SysUser struct {
	global.GVA_MODEL
	UUID          uuid.UUID      `json:"uuid" gorm:"index;comment:用户UUID"`                                                                   // 用户UUID
	Username      string         `json:"userName" gorm:"index;comment:用户登录名"`                                                                // 用户登录名
	Name          string         `json:"name" form:"name" gorm:"column:name;comment:名称;"`                                                    // 名称
	Password      string         `json:"-"  gorm:"comment:用户登录密码"`                                                                           // 用户登录密码
	NickName      string         `json:"nickName" gorm:"default:系统用户;comment:用户昵称"`                                                          // 用户昵称
	HeaderImg     string         `json:"headerImg" gorm:"default:https://image.cushdylm.com/app/icon/iHealth/logo2.png;comment:用户头像"`        // 用户头像
	AuthorityId   uint           `json:"authorityId" gorm:"default:888;comment:用户角色ID"`                                                      // 用户角色ID
	Authority     SysAuthority   `json:"authority" gorm:"foreignKey:AuthorityId;references:AuthorityId;comment:用户角色"`                        // 用户角色
	Authorities   []SysAuthority `json:"authorities" gorm:"many2many:sys_user_authority;"`                                                   // 多用户角色
	Phone         string         `json:"phone"  gorm:"comment:用户手机号"`                                                                        // 用户手机号
	Email         string         `json:"email"  gorm:"comment:用户邮箱"`                                                                         // 用户邮箱
	Enable        int            `json:"enable" gorm:"default:1;comment:用户是否被冻结 1正常 2冻结"`                                                    //用户是否被冻结 1正常 2冻结
	Creator       uint           `json:"creator" form:"creator" gorm:"default:1;comment:创建者"`                                                // 创建者
	CreatorInfo   *SysUser       `json:"creatorInfo" gorm:"foreignKey:Creator;references:ID;comment:创建者信息;"`                                 // 创建者信息
	Province      string         `json:"province" form:"province" gorm:"column:province;comment:省;"`                                         // 省
	City          string         `json:"city" form:"city" gorm:"column:city;comment:市;"`                                                     // 市
	Area          string         `json:"area" form:"area" gorm:"column:area;comment:区/县;"`                                                   // 区/县
	Addr          string         `json:"addr" form:"addr" gorm:"column:addr;comment:详细地址;"`                                                  // 详细地址
	OriginSetting common.JSONMap `json:"originSetting" form:"originSetting" gorm:"type:text;default:null;column:origin_setting;comment:配置;"` //配置
	OpenNum       uint           `json:"openNum" form:"openNum" gorm:"column:open_num;default:0;comment:开通数量;size:19;"`                      // 授权开通数量
}

func (SysUser) TableName() string {
	return "sys_users"
}

func (s *SysUser) GetUsername() string {
	return s.Username
}

func (s *SysUser) GetNickname() string {
	return s.NickName
}

func (s *SysUser) GetUUID() uuid.UUID {
	return s.UUID
}

func (s *SysUser) GetUserId() uint {
	return s.ID
}

func (s *SysUser) GetAuthorityId() uint {
	return s.AuthorityId
}

func (s *SysUser) GetUserInfo() any {
	return *s
}
